// 请求前处理
export function beforeRequest(config) {
  return config
}

// 请求失败回调
export function requestError(error) {
  // 错误抛到业务代码
  error.msg = '服务器异常，请联系管理员！'
  throwError(error)
}

// 响应成功回调
export function afterResponse(response, noMsg) {
  const status = response.status
  const res = response.data
  if (status < 200 || status >= 300) {
    // 处理http错误，抛到业务代码
    throwError(createError(status), noMsg)
  } else {
    if (res.code) {
      if (res.code === 200 || [1000].includes(+res.code)) {
        return res
      } else {
        let error = res.msg ? new Error(res.msg) : createError(res.code, noMsg)
        throwError(error, noMsg)
      }
    } else {
      return res
    }
  }
}

// 响应失败回调
export function responseError(error, noMsg) {
  // 错误抛到业务代码
  if (error.response && error.response.status) {
    const status = error.response.status
    throwError(createError(status), noMsg)
  } else {
    error.msg = '请求超时或服务器异常！'
    throwError(error, noMsg)
  }
}

// 构建异常
export function createError(status) {
  const msg = {
    '400': '请求错误(400)',
    '401': '当前账号已在其他地方登录或未授权，若想继续操作，请尝试重新登录！',
    '403': '拒绝访问(403)',
    '404': '请求出错(404)',
    '408': '请求超时(408)',
    '500': '服务器错误(500)',
    '501': '服务未实现(501)',
    '502': '网络错误(502)',
    '503': '服务不可用(503)',
    '504': '网络超时(504)',
    '505': 'HTTP版本不受支持(505)'
  }
  const errorMsg = msg[status] || `连接出错(${status})!`
  const err = new Error(status)
  err.code = status
  err.msg = `${errorMsg}`
  return err
}

// 抛出异常
export function throwError(error, noMsg) {
  let msg =  error.msg || error
  if (!noMsg) {
    alert(msg)
  }
  throw error
}
